package com.xci.core.base;

import com.xci.core.domain.BoolMessage;
import com.xci.core.domain.HistoryInfo;
import com.xci.core.domain.LogInfo;
import com.xci.core.helper.ObjectHelper;
import com.xci.core.internal.BatchUpdateCallback;
import com.xci.core.internal.Sys;
import com.xci.sys.entity.SysUser;

import java.util.List;

/**
 * 系统服务基类
 * @author 吕艳阳
 */
public class BaseService {
    /**
     * 获取当前操作用户
     */
    protected SysUser getCurrentUser() {
        return Sys.me().getCurrentUser();
    }

    /**
     * 获取用户对象
     * @param userId 用户主键
     */
    protected SysUser getUser(String userId) {
        return Sys.me().getUser(userId);
    }

    /**
     * 设置实体用户字段值
     * @param entity 实体对象
     * @param created 是否新建
     */
    protected static void setUserInfo(Object entity, boolean created) {
        Sys.me().setUserInfo(entity, created);
    }

    /**
     * 设置实体用户字段值
     * @param entity 实体对象
     */
    protected static void setCreateUserInfo(Object entity) {
        Sys.me().setUserInfo(entity, true);
    }

    /**
     * 设置实体用户字段值
     * @param entity 实体对象
     */
    protected static void setUpdateUserInfo(Object entity) {
        Sys.me().setUserInfo(entity, false);
    }

    /**
     * 设置实体用户字段值
     * @param entity 实体对象
     */
    protected static void setOperateUserInfo(Object entity) {
        Sys.me().setUserInfo(entity, false);
    }

    /**
     * 保存系统操作日志
     * @param logInfo 日志信息
     */
    protected void saveLog(LogInfo logInfo) {
        Sys.me().saveLog(logInfo);
    }

    /**
     * 保存新建历史记录
     * @param history 历史信息
     */
    protected void saveInsertHistory(HistoryInfo history) {
        Sys.me().saveInsertHistory(history);
    }

    /**
     * 保存修改历史记录
     * @param history 历史信息
     */
    protected void saveUpdateHistory(HistoryInfo history) {
        Sys.me().saveUpdateHistory(history);
    }

    /**
     * 保存删除历史记录
     * @param history 历史信息
     */
    protected void saveDeleteHistory(HistoryInfo history) {
        Sys.me().saveDeleteHistory(history);
    }

    /**
     * 手动验证Bean对象
     * @param bean bean对象
     */
    public BoolMessage validBean(Object bean) {
        return Sys.me().validBean(bean);
    }

    /**
     * 批量更新父节点和路径字段
     * @param keyValues 键值对
     * @param callback 回调函数
     */
    protected RestMessage batchUpdateParent(List<PrimaryKeyValue> keyValues, BatchUpdateCallback callback) {
        if(ObjectHelper.isEmpty(keyValues)) {
            return RestMessage.success();
        }
        callback.before();
        for(PrimaryKeyValue keyValue : keyValues) {
            String id = keyValue.getId();
            String key = keyValue.getKey();
            String val = keyValue.getValue();
            if("Path".equalsIgnoreCase(key)) {
                callback.updatePath(id, val);
            } else if("ParentId".equalsIgnoreCase(key)) {
                callback.updateParentId(id, val);
            }
        }
        callback.after();
        return RestMessage.success();
    }
}